// utils/request.js
const app = getApp()

export function request(options) {
  // 获取基址
  const baseURL = options.baseURL || (app && app.globalData.baseURL) || 'http://localhost:48080'
  
  // 如果url不是完整路径，拼接基址
  if (!options.url.startsWith("https://") && !options.url.startsWith("http://")) {
    options.url = baseURL + options.url
  }

  // 获取token
  const token = wx.getStorageSync('accessToken')
  
  // 默认配置
  const baseOptions = {
    url: options.url,
    method: options.method || 'GET',
    data: options.data || {},
    header: {
      'content-type': 'application/json',
      ...options.header
    }
  }

  // 添加认证token（排除登录相关接口）
  const isAuthUrl = options.url.includes('/login/') || options.url.includes('/refreshToken')
  if (token && !isAuthUrl) {
    baseOptions.header['Authorization'] = `Bearer ${token}`
  }

  // 返回Promise
  return new Promise((resolve, reject) => {
    wx.request({
      ...baseOptions,
      success(res) {
        // 统一处理成功响应
        if (res.statusCode === 200) {
          // 根据你的后端数据结构调整
          if (res.data.code === 0) {
            resolve(res.data.data) // 返回data字段
          } else {
            // 业务逻辑错误
            const errorMsg = res.data.msg || '请求失败'
            reject(new Error(errorMsg))
            // 统一错误提示
            wx.showToast({
              title: errorMsg,
              icon: 'none'
            })
          }
        } else {
          // HTTP状态码错误
          reject(new Error(`请求失败：${res.statusCode}`))
          wx.showToast({
            title: `网络错误：${res.statusCode}`,
            icon: 'none'
          })
        }
      },
      fail(err) {
        // 统一处理失败情况
        console.error('请求失败：', err)
        reject(err)
        wx.showToast({
          title: '网络连接失败',
          icon: 'none'
        })
      },
      complete() {
        // 可以在这里处理请求完成的统一逻辑，如关闭加载提示
      }
    })
  })
}

// 快捷方法
export const get = (url, data = {}, options = {}) => {
  return request({ url, method: 'GET', data, ...options })
}

export const post = (url, data = {}, options = {}) => {
  return request({ url, method: 'POST', data, ...options })
}

export const put = (url, data = {}, options = {}) => {
  return request({ url, method: 'PUT', data, ...options })
}

export const del = (url, data = {}, options = {}) => {
  return request({ url, method: 'DELETE', data, ...options })
}